from django.db import models
# Create your models here.
from django.db import models


# 角色模型
class Roles(models.Model):
    role_name = models.CharField(max_length=20, unique=True)

    def __str__(self):
        return self.role_name

    class Meta:
        db_table = 'role'


# 职位模型
class Position(models.Model):
    name = models.CharField(max_length=50, unique=True)

    class Meta:
        db_table = 'position'


# 部门模型
class Department(models.Model):
    name = models.CharField(max_length=50, unique=True)

    class Meta:
        db_table = 'department'


# 用户模型
class AdminUser(models.Model):
    name = models.CharField(max_length=20)
    password = models.CharField(max_length=255)
    dep = models.ForeignKey(Department, on_delete=models.CASCADE)  # 部门id，外键关联部门
    pos = models.ForeignKey(Position, on_delete=models.CASCADE)  # 职位id，外键关联职位
    role = models.ForeignKey(Roles, on_delete=models.CASCADE)  # 角色id，外键关联角色

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'admin_user'


# 资源模型
class Resources(models.Model):
    resource_name = models.CharField(max_length=50)
    url = models.CharField(max_length=255, unique=True, blank=True, null=True)
    pid = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True)

    def __str__(self):
        return self.resource_name

    class Meta:
        db_table = 'resource'


# 角色资源模型
class RoleResource(models.Model):
    role = models.ForeignKey(Roles, on_delete=models.CASCADE)
    resource = models.ForeignKey(Resources, on_delete=models.CASCADE)

    def __str__(self):
        return f'{self.role} - {self.resource}'

    class Meta:
        db_table = 'role-source'


# 工作流模型
class Workflow(models.Model):
    name = models.CharField(max_length=50, unique=True)  # 名称，唯一
    params = models.TextField()  # 参数字段，json序列化存储（注意：Django 3.1及更高版本使用JSONField，否则您可能需要使用TextField并手动处理JSON）
    status = models.IntegerField(choices=((1, '可用'), (2, '停用')))  # 状态，1可用 2停用

    class Meta:
        db_table = 'workflow'


# 工作流权限模型
class WorkflowPermission(models.Model):
    role = models.ForeignKey(Roles, on_delete=models.CASCADE)  # 角色id，外键关联角色表
    workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE)  # 工作流id，外键关联工作流表

    class Meta:
        db_table = 'workflow_permission'


# 任务模型
class Task(models.Model):
    name = models.CharField(max_length=30)  # 任务名称
    params = models.TextField()  # 参数字段，json序列化存储（注意JSONField的使用条件）
    workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE)  # 工作流id，外键关联工作流表
    user = models.ForeignKey(AdminUser, on_delete=models.CASCADE)  # 用户id，外键关联用户表
    next_audit = models.ForeignKey(AdminUser, on_delete=models.SET_NULL, null=True,
                                   related_name='next')  # 下一操作人id，可以为空
    task_status = models.IntegerField(choices=((1, '新建'), (2, '审批中'), (3, '完成')))  # 任务状态

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'task'


# 审批记录模型
class AuditRecord(models.Model):
    task = models.ForeignKey(Task, on_delete=models.CASCADE)  # 任务id，外键关联任务表
    audit_user = models.ForeignKey(AdminUser, on_delete=models.CASCADE)  # 操作人id
    audit_time = models.DateTimeField(auto_now_add=True)  # 操作时间，自动添加当前时间
    audit_status = models.IntegerField(choices=((1, '已通过'), (2, '未通过'), (3, '审核中'), (4, '已撤销')))  # 审核状态

    def __str__(self):
        return f"{self.task.name} - {self.audit_user.name} - {self.audit_time}"  # 假设有一个友好的显示格式

    class Meta:
        db_table = 'audit_record'


